package com.zhou.javase.ch03;

/**
 * 类的二要素: 属性（名词）与方法（动词
 * 五要素 ：实例变量  构造器  设定器   访问器  功能方法
 * 
 * 构造器：
 * 没有返回值 void也不写 ，方法名与类名相同。
 * 一个类中 如果没有人为编写构造器，则会自动生成一个默认（空）构造器。
 * 当一个类中，人为编写了有参数构造器时，则无参数（空）构造器就不会自动生成；
 * 作用：new + 类名(), 
 * Person p = new Person();
 * p.age; p.getInfo();
 * 调用： 对象.属性；对象.方法(实参)
 * person 类内部 this 相当于 p；
 * 构造方法相互调用 使用this();调用时，规定必须放在第一行！this关键字不能用在静态方法（static）中！
 * 
 * 重载：
 * 方法名 相同  参数类型或个数不同     
 * 与返回值无关！
 * 方法重载 其目的 为了方便调用者使用！
 * 
 * static : 
 * 	静态方法调用不用new 对象，直接类名.属性 ，直接类名.方法()；
 * 	静态的方法不能使用非静态的方法和属性 ；
 * 静态初始化块: 在类的类题中,用static 修饰的语句块.
 * 作用: 实现静态变量的初始化.
 * 它在第一次加载类的时候被执行且执行一次.
 * */
public class Person {
	/*实例变量 ==成员变量 == 全局变量*/
	private String name ;
	private boolean sex = false ;
	private  int age ;
	/*ch默认为空字符*/
	private char ch;
	
	public Person(){
	}
	/**
	 * 构造函数重载
	 * @param age 年龄
	 * @param name 名字
	 */
	public Person(int age, String name){
		this.age = age ;
		this.name = name;
	}
	public Person( String name , boolean sex){
		/*this.age = age ;
		this.name = name ;*/
		/*
		 * 构造方法相互调用！ 调用时，规定必须放在第一行！
		 * this关键字不能用在静态方法（static）中！
		 */
		this(4 ,name);
		this.sex = sex ;
	}
	/**
	 * 设定器 （调节器）
	 * @param name
	 */
	public void setName(String name){
		this.name = name;
	}
	public void setSex(boolean sex){
		this.sex = sex;
	}
	public void setAge(int age){
		this.age = age;
	}
	/**
	 * 访问器
	 * @return
	 */
	public String getName(){
		return name;
	}
	public boolean getSex(){
		return this.sex;
	}
	public int getAge(){
	
		return this.age;
	}
	
	/**
	 * 自我介绍
	 * @return
	 */
	public String getInfo(){
		/*
		 * 打印结果更加符合肉眼直观
		 */
		return "姓名:"+ this.name +",性别:" + this.sex + ",年龄:" + this.age + ",ch:" + ch + "]";
	}

	public char getCh() {
		return ch;
	}

	public void setCh(char ch) {
		this.ch = ch;
	}
	
	public void add(int x ,int y){
		/*x + y = 
		 * 5 + 3 * 2
		 * 5 * (3 + 2)  
		 *  小括号的作用：优先计算
		 * */
		System.out.println("x + y = " + (x + y));
	}
	
	/*public int add(int x ,int y){
		
	}*/
	
	/**
	 * 加法没有返回值 不能够实现连加
	 * @param x
	 * @param y
	 */
	public void add(double x , double y){
		double z = x + y ;
		System.out.println("x + y = " + z);
	}
	
	/*public void add(int x ,int y, int z){
		System.out.println("x + y + z =" + (x + y +z));
	}*/
	
	public void add(int x ,int y ,int z){
		System.out.println("x + y + z =" + (x + y + z )) ;
	}
	/**
	 * 减法 的重载有返回值  可以实现连减 ；
	 * @param x
	 * @param y
	 * @return
	 */
	public int sub(int x , int y){
		return x - y ;
	}
	
	public double sub(double x , double y){
		return x - y ;
	}
	
	public static int addStatic(int x , int y){
		int c = x + y ;
		System.out.println("addStatic:c = " + c);
		return c ;
	}
	public static int subStatic(int x ,int y){
		
		return x - y ;
	}

}
